package cn.iocoder.yudao.module.promotion.groupon.service.app;

import cn.iocoder.yudao.framework.business.basic.pojo.dto.LocationQueryDTO;
import cn.iocoder.yudao.framework.business.basic.pojo.dto.SortQueryDTO;
import cn.iocoder.yudao.framework.business.basic.service.ListService;
import cn.iocoder.yudao.framework.business.basic.service.SimpleDetailService;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.api.promotion.groupon.dto.GrouponPackageRespDTO;
import cn.iocoder.yudao.module.promotion.groupon.pojo.dto.AppGrouponPackageQueryDTO;
import cn.iocoder.yudao.module.promotion.groupon.pojo.vo.AppGrouponPackageVO;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * <pre>
 * OOoO0OOoO0OOOooo0oOOOO0OOOOO0oooOO0ooOOO0Ooooo0OOOOo0ooooO0OOooo0Ooooo0OOOOO
 *  这里是文件说明
 * OOoO0OOoO0OOOooo0oOOOO0OOOOO0oooOO0ooOOO0Ooooo0OOOOo0ooooO0OOooo0Ooooo0OOOOO
 * </pre>
 *
 * @author 山野羡民（1032694760@qq.com）
 * @since 2025/01/13
 */
public interface AppGrouponPackageService extends SimpleDetailService<AppGrouponPackageVO>, ListService<AppGrouponPackageVO, AppGrouponPackageQueryDTO> {

    /**
     * 根据店铺编号集合，获得团购套餐列表
     *
     * @param shopIds 店铺编号集合
     * @param limit 每个店铺限制数据数量
     * @return 团购套餐列表
     */
    Map<Long, List<GrouponPackageRespDTO>> getMapByShopIds(Collection<Long> shopIds, int limit);

    /**
     * 根据经纬度获得有团购套餐得店铺编号及距离
     *
     * @param location 经纬度
     * @param sort 排序
     * @return 店铺编号集合
     */
    Map<Long, Integer> getShopDistanceMap(LocationQueryDTO location, SortQueryDTO sort);

    /**
     * 根据店铺编号集合，获得团购套餐编号
     *
     * @param shopIds 店铺编号集合
     * @return 团购套餐列表
     */
    Map<Long, Long> getShopPackageMap(Collection<Long> shopIds);

    PageResult<AppGrouponPackageVO> getPage(Integer pageNo, Integer pageSize, AppGrouponPackageQueryDTO param);

}
